/*
 * CheckBoxTableProperties.java
 *
 * Copyright 2011 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 21/12/2010, 11:23:38 AM
 */

package com.ufps.cuatro.util.editor;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JCheckBox;

import com.ufps.cuatro.modelo.representacion.Propiedad;
import com.ufps.cuatro.util.model.MyCheckItemPropertiesClass;
import com.ufps.cuatro.util.opciones.TypeOptionPreferences;

/**
 * <i><b>CheckBoxTableProperties:</b></i> @DescripcionClase
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 21/12/2010
 * @see ActionListener
 * @see JCheckBox
 */
public class CheckBoxTableProperties extends JCheckBox implements ActionListener{
    private static final long serialVersionUID = 5616092432650512269L;

    private Propiedad objPropiedad;
    private MyCheckItemPropertiesClass objPropiedadClase;
    private TypeOptionPreferences objTypeOptionPreferences;
    private int modo = MODO_VALOR;
    
    /**
     * 
     */
    public final static int MODO_VALOR = 0;
    /**
     * 
     */
    public final static int MODO_SET = 1;
    /**
     * 
     */
    public final static int MODO_GET = 2;
    /**
     * 
     */
    public final static int MODO_CLASS = 3;
    /**
     * 
     */
    public final static int MODO_OPTION_PREFERENCES = 4;

    /**
     * @DescripcionMetodo
     * @param text @DescripcionParametro
     * @param selected @DescripcionParametro
     */
    public CheckBoxTableProperties(String text, boolean selected) {
        super(text, selected);
        this.addActionListener(CheckBoxTableProperties.this);
        this.setToolTipText("Al Seleccionar el Campo Activa o Desactiva la Propiedad.");
    }

    /**
     * @DescripcionMetodo
     * @param text @DescripcionParametro
     */
    public CheckBoxTableProperties(String text) {
        super(text);
        this.addActionListener(CheckBoxTableProperties.this);
        this.setToolTipText("Al Seleccionar el Campo Activa o Desactiva la Propiedad.");
    }

    /**
     * @DescripcionMetodo
     */
    public CheckBoxTableProperties() {
        this.addActionListener(CheckBoxTableProperties.this);
        this.setToolTipText("Al Seleccionar el Campo Activa o Desactiva la Propiedad.");
    }
    
    /**
     * @DescripcionMetodo
     * @param objPropiedad @DescripcionParametro
     * @param selected @DescripcionParametro
     */
    public CheckBoxTableProperties(Propiedad objPropiedad, boolean selected) {
        super("", selected);
        this.objPropiedad = objPropiedad;
        this.addActionListener(CheckBoxTableProperties.this);
        this.setToolTipText("Al Seleccionar el Campo Activa o Desactiva la Propiedad.");
    }
    
    /**
     * 
     * @param objPropiedadClase
     * @param selected
     */
    public CheckBoxTableProperties(MyCheckItemPropertiesClass objPropiedadClase, boolean selected) {
        super("", selected);
        this.modo = CheckBoxTableProperties.MODO_CLASS;
        this.objPropiedadClase = objPropiedadClase;
        this.addActionListener(CheckBoxTableProperties.this);
        this.setToolTipText("Al Seleccionar el Campo Activa o Desactiva la Propiedad.");
    }
    
    /**
     * 
     * @param objTypeOptionPreferences
     * @param selected
     */
    public CheckBoxTableProperties(TypeOptionPreferences objTypeOptionPreferences, boolean selected) {
        super("", selected);
        this.modo = CheckBoxTableProperties.MODO_OPTION_PREFERENCES;
        this.objTypeOptionPreferences = objTypeOptionPreferences;
        this.addActionListener(CheckBoxTableProperties.this);
        this.setToolTipText("Al Seleccionar el Campo Activa o Desactiva la Opción.");
    }
    

    /**
     *  @DescripcionMetodo
     * @param objPropiedad @DescripcionParametro
     * @param text @DescripcionParametro
     * @param selected @DescripcionParametro
     */
    public CheckBoxTableProperties(Propiedad objPropiedad, String text, boolean selected) {
        super(text, selected);
        this.objPropiedad = objPropiedad;
        this.addActionListener(CheckBoxTableProperties.this);
        this.setToolTipText("Al Seleccionar el Campo Activa o Desactiva la Propiedad.");
    }
    
    /**
     * 
     * @param objPropiedad
     * @param text
     * @param selected
     * @param modo
     */
    public CheckBoxTableProperties(Propiedad objPropiedad, String text, boolean selected, int modo) {
        super(text, selected);
        this.objPropiedad = objPropiedad;
        this.modo = modo;
        this.addActionListener(CheckBoxTableProperties.this);
        this.setToolTipText("Al Seleccionar el Campo Activa o Desactiva la Propiedad.");
    }

    public void actionPerformed(ActionEvent e) {
       try{
        switch(modo){
            case CheckBoxTableProperties.MODO_VALOR:
                this.objPropiedad.getObjParametrosSet().get(0).setStrValue(String.valueOf(this.isSelected()));
                break;
            case CheckBoxTableProperties.MODO_SET:
                this.objPropiedad.setViewSet(this.isSelected());
                break;
            case CheckBoxTableProperties.MODO_GET:
                this.objPropiedad.setViewGet(this.isSelected());
                break;
            case CheckBoxTableProperties.MODO_CLASS:
                this.objPropiedadClase.setSelected(this.isSelected());
                break;
            case CheckBoxTableProperties.MODO_OPTION_PREFERENCES:
                this.objTypeOptionPreferences.setSelected(this.isSelected());
                this.objTypeOptionPreferences.setValue(String.valueOf(this.isSelected()));
                break;    
        }        
    }catch(java.lang.NullPointerException ex){}
    }

}
